import ast

from 程序核心代码.ast节点.节点定义.具体ast节点.容器.带容器节点模版 import 带容器ast节点基础模型模板
from 程序核心代码.mvvm重构.基础定义.节点管理器.自动节点注册表 import 注册节点模型


@注册节点模型(ast.AsyncFunctionDef)
class 异步函数节点(带容器ast节点基础模型模板):

    def __init__(self,ast节点, 所属节点模型管理器, 上级节点=None,节点位置=None):
        super().__init__(ast节点, 所属节点模型管理器, "异步函数定义",节点位置=节点位置 ,上级节点=上级节点)
        self.参数名称 = "函数名"
        self.节点介绍 = self.节点介绍=self.获取属性("节点名称")+"：默认介绍内容"
        for 参数名 in self.参数名列表: # 需要添加类型约束 参数值.annotation
            self.添加接口到节点("数据流", "输入", 接口名称=参数名.arg, 必须连接=True)

    def 节点数据解析(self):
        """
        解析函数节点的相关信息，包括函数名、参数、默认值、装饰器和返回类型。
        """
        # 解析函数名
        self.函数名 = self._ast节点.name
        self.参数值 = self.函数名
        # 解析参数列表
        self.参数名列表 = self._ast节点.args.args  # 直接使用原始列表

        # 解析默认值列表（可能比参数列表短，要对齐处理）
        self.默认值列表 = self._ast节点.args.defaults

        # 解析装饰器列表
        self.装饰器列表 = self._ast节点.decorator_list

        # 解析返回值类型（可能为 None）
        self.返回值类型标注 = self._ast节点.returns

        # 额外检查参数的其他属性，例如可变参数或关键字参数
        self.可变参数 = self._ast节点.args.vararg
        self.关键字参数 = self._ast节点.args.kwarg
        self.仅关键字参数列表 = self._ast节点.args.kwonlyargs
        self.仅关键字默认值列表 = self._ast节点.args.kw_defaults


    def 节点输入异常检查(self):
        pass
    def 参数值修改(self, 参数值):
        #print("变量节点检测到变量名修改值为：", 变量名)
        #检测新参数是否合法 ,不合法则不修改
        if self.参数名检测(参数值):
            if 参数值!= self.参数值 :
                # print("修改前的ast节点")
                # print(ast.dump(起始接口._ast节点, annotate_fields=True, indent=4))
                self.所属节点模型管理器.ast操作器.修改节点(self.节点路径 + ["id"], 参数值)
                self.所属节点模型管理器.重新计算整个容器()

        else:
            print("变量名不合法")
            self.图形项.节点参数.setPlainText(self.变量名)

